package com.lagou.edu.spring.core;

/**
 * 最佳建议：在循环依赖出现时
 * earlyWrapper会被先调用，如果earlyWrapper被调用了那么preProcess和afterProcess就不该再被调用
 *
 * @author 大犬
 * @date 2020/4/2
 */
public interface BeanPostProcessor {
    /**
     * bean的前置处理
     *
     * @param beanName bean名称
     * @param bean     bean对象
     * @return 返回增强结果
     */
    default Object preProcess(String beanName, Object bean) {
        return null;
    }

    /**
     * 后置处理
     *
     * @param beanName bean名称
     * @param bean     bean对象
     * @return 返回增强结果
     */
    default Object afterProcess(String beanName, Object bean) {
        return null;
    }


    /**
     * 早期增强处理
     *
     * @param beanName bean名称
     * @param bean     bean对象
     * @return 返回早期增强后的对象
     */
    default Object earlyWrapper(String beanName, Object bean) {
        return null;
    }
}
